package cn.iocoder.yudao.module.pay.dal.mysql.paycollectorder;

import cn.iocoder.yudao.framework.common.enums.pay.AuditStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.pay.controller.admin.collect.vo.PayCollectOrderPageReqVO;
import cn.iocoder.yudao.module.pay.dal.dataobject.paycollectorder.PayCollectOrderDO;
import org.apache.ibatis.annotations.Mapper;

/**
 * 收款订单 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface PayCollectOrderMapper extends BaseMapperX<PayCollectOrderDO> {

    default PageResult<PayCollectOrderDO> selectPage(PayCollectOrderPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<PayCollectOrderDO>()
                .eqIfPresent(PayCollectOrderDO::getPayOrderNo, reqVO.getOrderNo())
                .eqIfPresent(PayCollectOrderDO::getUserId, reqVO.getUserId())
                .eqIfPresent(PayCollectOrderDO::getCollectInfoId, reqVO.getCollectInfoId())
                .eqIfPresent(PayCollectOrderDO::getAmount, reqVO.getAmount())
                .eqIfPresent(PayCollectOrderDO::getActualAmount, reqVO.getActualAmount())
                .eqIfPresent(PayCollectOrderDO::getFee, reqVO.getFee())
                .eqIfPresent(PayCollectOrderDO::getPayPicUrl, reqVO.getPayPicUrl())
                .eqIfPresent(PayCollectOrderDO::getRemark, reqVO.getRemark())
                .eqIfPresent(PayCollectOrderDO::getStatus, reqVO.getStatus())
                .eqIfPresent(PayCollectOrderDO::getAuditAdminId, reqVO.getAuditAdminId())
                .eqIfPresent(PayCollectOrderDO::getAuditReason, reqVO.getAuditReason())
                .betweenIfPresent(PayCollectOrderDO::getAuditTime, reqVO.getAuditTime())
                .betweenIfPresent(PayCollectOrderDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(PayCollectOrderDO::getId));
    }

    default PayCollectOrderDO getCollectOrderByPayId(Long id){
        return selectOne(PayCollectOrderDO::getPayOrderNo, String.valueOf(id), PayCollectOrderDO::getStatus, AuditStatusEnum.PENDING.getStatus());
    }
}